﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using BLLEP.Presentacion;

namespace BLLEP.Funcionalidad
{
    public class BLLChat:BLLGenerico
    {
        public BLLChat(EstacionDePoderDataContext contexto) : base(contexto) { }
        public BLLChat() : this(new EstacionDePoderDataContext()) { }

        public List<MensajePresentacion> TraerUltimosMensajes()
        {
            return (from c in Contexto.EP_Chats
                    orderby c.IdChat descending
                    where c.EsAdmin == false
                    group c by c.IdUsuario into grupo
                    select new MensajePresentacion()
                    {
                        IdUsuario = grupo.Key.Value,
                        Fecha = grupo.OrderByDescending(g => g.Fecha).FirstOrDefault().Fecha.Value,
                        Mensaje = grupo.OrderByDescending(g => g.Fecha).FirstOrDefault().Texto,
                        NombreUsuario = grupo.OrderByDescending(g => g.Fecha).FirstOrDefault().EP_Usuario.Email,
                        Visto = grupo.OrderByDescending(g => g.Fecha).FirstOrDefault().Visto.Value
                    }).Take(100).ToList();
        }

        public void CargarMensaje(string mensaje, string mailUsuarioLogueado, int idUsuarioCliente)
        {
            BLLUsuario bllUsuario = new BLLUsuario(Contexto);
            EP_Usuario usuario = bllUsuario.Traer(idUsuarioCliente);

            EP_Chat nuevoChat = new EP_Chat();
            nuevoChat.EP_Usuario = usuario;
            nuevoChat.Fecha = DateTime.Now;
            nuevoChat.Texto = mensaje;
            nuevoChat.EsAdmin = new BLLRol(Contexto).TraerRoles(mailUsuarioLogueado).Contains("LordOfUniverse");
            nuevoChat.Visto = false;

            Contexto.EP_Chats.InsertOnSubmit(nuevoChat);
        }

        public List<EP_Chat> TraerUltimosMensajes(int idUsuario)
        {
            return (from c in Contexto.EP_Chats
                    where c.EP_Usuario.IdUsuario == idUsuario
                    orderby c.IdChat descending
                    select c).ToList();
        }

        public void MarcarComoVistos(int idUsuario)
        {
            List<EP_Chat> chats = Contexto.EP_Chats.Where(c => c.IdUsuario == idUsuario).ToList();

            foreach (EP_Chat chat in chats)
                chat.Visto = true;
        }
    }
}
